from otree.api import * author = 'Nathaniel Lawrence, LEMMA, Université Panthéon-Assas' doc = """ Loss aversion measure from Gächter, S., Johnson, E. J., & Herrmann, A. (2022). Individual-level loss aversion in riskless and risky choices. Theory and Decision, 92(3–4), 599–624. https://doi.org/10.1007/s11238-021-09839-8 """ def read_csv_stimuli(): import csv f = open(__name__ + '/stimuli.csv', encoding='utf-8-sig') rows = [row for row in csv.DictReader(f)] for row in rows: # all values in CSV are string unless you convert them row['loss'] = cu(row['loss']) return rows ### Define constants here, in all-caps class C(BaseConstants): NAME_IN_URL = 'la' PLAYERS_PER_GROUP = None NUM_ROUNDS = 1 LOSS = read_csv_stimuli() GAIN = cu(6) class Subsession(BaseSubsession): pass class Group(BaseGroup): pass ### define the questions a player must answer here class Player(BasePlayer): def make_field(number): return models.StringField( choices=[[float(C.LOSS[number]['loss']),C.LOSS[number]['loss']],['toss',C.GAIN]], label='',#f"{C.GAIN} right now or {C.LOSS[number]['loss']} in ", widget=widgets.RadioSelect ) # delay = models.LongStringField(initial=C.DELAY_JSON) q1 = make_field(0) q2 = make_field(1) q3 = make_field(2) q4 = make_field(3) q5 = make_field(4) q6 = make_field(5) # q7 = make_field(6) # q8 = make_field(7) # q9 = make_field(8) # q10 = make_field(9) # q10 = models.FloatField(initial=0) # PAGES class LossAversion(Page): form_model = 'player' @staticmethod def get_form_fields(player: Player): import random form_fields = ['q1','q2','q3','q4','q5','q6'] random.shuffle(form_fields) return form_fields class ResultsWaitPage(WaitPage): pass class Results(Page): pass page_sequence = [LossAversion]